package com.github.binarywang.demo.wx.mp.service.oss;

import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author xiaoban
 * @date 2021/7/2 下午6:35
 */
public interface AliOssService {
    /**
     * 上传
     *
     * @param name     文件名 可带路径。eg: dir1/dir2/filename.suffix 不以/开头
     * @param filePath 文件路径
     * @return {@link String}
     */
    String upload(String name, String filePath);

    /**
     * 上传
     *
     * @param name     文件名 可带路径。eg: dir1/dir2/filename.suffix 不以/开头
     * @param stream 输入流
     * @return {@link String}
     */
    String upload(String name, InputStream stream, Long fileLength);

    /**
     * 上传
     *
     * @param name 文件名 可带路径。eg: dir1/dir2/filename.suffix 不以/开头
     * @param file 文件
     * @return {@link String}
     */
    String upload(String name, File file);

    /**
     * 上传
     *
     * @param name       文件名 可带路径。eg: dir1/dir2/filename.suffix 不以/开头
     * @param filePath   文件路径
     * @param uploadType 上传类型
     * @return {@link String}
     */
    String upload(String name, String filePath, UploadType uploadType);

   default String upload(String filePath, MultipartFile file){
       if (StringUtils.isBlank(filePath)){
           filePath = "upload";
       }
       String separator = "/";
       if(filePath.startsWith(separator)){
           filePath =  filePath.replaceFirst(separator,"");
       }
       if (!filePath.endsWith(separator)){
           filePath+=separator;
       }
       SimpleDateFormat sdf = new SimpleDateFormat("/yyyy/MM/dd/");
       String name = filePath+ sdf.format(new Date()) +file.getOriginalFilename();
       try {
           return upload(name, file.getInputStream(), file.getSize());
       } catch (IOException e) {
           e.printStackTrace();
           throw new RuntimeException("文件上传失败!");
       }
   }
}
